// Copyright (c) 1999-2004 Brian Wellington (bwelling@xbill.org)

package org.xbill.DNS;

/**
 * Constants and functions relating to DNS opcodes
 * 
 * @author Brian Wellington
 */

public final class Opcode {

	/** A standard query */
	public static final int QUERY = 0;

	/** An inverse query (deprecated) */
	public static final int IQUERY = 1;

	/** A server status request (not used) */
	public static final int STATUS = 2;

	/**
	 * A message from a primary to a secondary server to initiate a zone
	 * transfer
	 */
	public static final int NOTIFY = 4;

	/** A dynamic update message */
	public static final int UPDATE = 5;

	private static Mnemonic opcodes = new Mnemonic("DNS Opcode",
			Mnemonic.CASE_UPPER);

	static {
		opcodes.setMaximum(0xF);
		opcodes.setPrefix("RESERVED");
		opcodes.setNumericAllowed(true);

		opcodes.add(QUERY, "QUERY");
		opcodes.add(IQUERY, "IQUERY");
		opcodes.add(STATUS, "STATUS");
		opcodes.add(NOTIFY, "NOTIFY");
		opcodes.add(UPDATE, "UPDATE");
	}

	private Opcode() {
	}

	/** Converts a numeric Opcode into a String */
	public static String string(int i) {
		return opcodes.getText(i);
	}

	/** Converts a String representation of an Opcode into its numeric value */
	public static int value(String s) {
		return opcodes.getValue(s);
	}

}
